package main

import (
	"fmt"
	"reflect"
)

type Pet interface {
	Name() string
}

type Dog struct {
	name string // 名字。
}

func (dog Dog) Name() string {
	return dog.name
}

func main() {
	// 示例1。
	var dog1 *Dog
	fmt.Println(dog1) // nil
	var pet Pet = dog1
	fmt.Println(pet)                  // nil
	fmt.Println(pet == nil)           // false
	fmt.Println(reflect.TypeOf(pet))  // *main.Dog
	fmt.Println(reflect.ValueOf(pet)) // nil

}

//打印结果可以看到pet的值为nil，但是pet==nil判断结果为false，
//是因为接口在判断是否为nil时，除了Value为nil，Type也要为nil，此例中pet的类型为*main.Dog
